package com.william.jdbcplus.test.enums;

import com.william.jdbcplus.common.enums.FieldEnum;

/**
 * 时间单位枚举
 *
 * @author niliwei
 */
public enum TimeUnitEnum implements FieldEnum {
    /**
     * 用户打卡周期，时间单位定义，不同的活动要求的打卡周期也不同，在上线活动时就需要指定
     */
    SECOND("秒", 1),
    MINUTE("分钟", 2),
    HOUR("小时", 3),
    DAY("天", 4),
    WEEK("周", 5),
    MONTH("月", 6),
    YEAR("年", 7),

    INVALID("无效", 255);

    /**
     * 枚举实例对应的名称与键值
     */
    private String name;
    private int index;

    private TimeUnitEnum(String name, int index) {
        this.name = name;
        this.index = index;
    }

    public static String getName(int index) {
        for (TimeUnitEnum e : TimeUnitEnum.values()) {
            if (index == e.index) {
                return e.name;
            }
        }
        return null;
    }

    public static String getName(TimeUnitEnum e) {
        if (null == e) {
            return null;
        }
        return e.name;
    }

    /**
     * 根据枚举值，获取枚举常量对应的整数键值，由于键值的跳跃性，不可以直接用枚举的ordinal()方法获取
     */
    public static int valueOf(TimeUnitEnum e) {
        if (null == e) {
            return -1;
        } else {
            return e.index;
        }
    }

    /**
     * 根据键值，获取对应的枚举值
     */
    public static TimeUnitEnum valueOf(int value) {
        /* 由于枚举indx为变量，无法使用switch */
        for (TimeUnitEnum e : TimeUnitEnum.values()) {
            if (value == e.index) {
                return e;
            }
        }

        return null;
    }

    @Override
    public String getName() {
        return name;
    }

    @Override
    public int getIndex() {
        return index;
    }
}
